package com.puboot.common.util;
import java.math.BigDecimal;
import java.util.List;

/**
 * 镁冶炼
 * Created by chen on 2021/12/14.
 */
public class MagnesiumSmeltingUtil {

    /**
     * 计算温室气体排放总量
     * @param eBurn 燃料燃烧排放量
     * @param eRawmaterial 能源作为原材料用途的排放量
     * @param eProcess 过程排放量
     * @param ePurchasedElectricity 购入的电力消费的排放量
     * @param ePurchaseHeat 购入的热力消费的排放量
     * @param eOutputElectricity 输出的电力排放量
     * @param eOutputHeat 输出的热力排放量
     * @return
     */
    public static Double getE(String eBurn, String eRawmaterial, String eProcess,
                              String ePurchasedElectricity, String ePurchaseHeat, String eOutputElectricity, String eOutputHeat){
        BigDecimal eOutputElectricityB = new BigDecimal(eOutputElectricity);
        BigDecimal eOutputHeatB = new BigDecimal(eOutputHeat);
        BigDecimal jsgc1 = GasDCUtil.allAdd(Double.valueOf(eBurn), Double.valueOf(eRawmaterial),
                    Double.valueOf(eProcess), Double.valueOf(ePurchasedElectricity), Double.valueOf(ePurchaseHeat));
        BigDecimal jsgc2 = jsgc1.subtract(eOutputElectricityB);
        return jsgc2.subtract(eOutputHeatB).doubleValue();
    }

    /**
     * 计算燃料燃烧排放量
     * @param ncvs 第i种化石燃料的平均低位发热量，对固体和液体燃料以GJ/吨为单位，对气体燃料以GJ /万Nm 3 为单位
     * @param fcs 第i种化石燃料的净消耗量，对固体和液体燃料以吨为单位，对气体燃料以万Nm 3 为单位
     * @param ccs 第i种化石燃料的单位热值含碳量
     * @param ofs 第i种化石燃料的碳氧化率
     * @return
     */
    public static Double getEBurn(List<String> ncvs, List<String> fcs, List<String> ccs, List<String> ofs){
        BigDecimal result = new BigDecimal(0.0);
        BigDecimal cl2B = new BigDecimal(12);
        for (int i = 0; i < ncvs.size(); i++) {
            BigDecimal jsgc1 = GasDCUtil.allMul(Double.valueOf(ncvs.get(i)), Double.valueOf(fcs.get(i)),
                    Double.valueOf(ccs.get(i)), Double.valueOf(ofs.get(i)), 44.0);
            result = result.add(jsgc1.divide(cl2B, 10, BigDecimal.ROUND_HALF_UP));
        }
        return result.doubleValue();
    }

    /**
     * 计算 能源作为原材料用途的排放量
     * @param s 自产的硅铁产量
     * @return
     */
    public static Double getERawmaterial(String s){
        BigDecimal cl2B = new BigDecimal(2.79);
        BigDecimal sB = new BigDecimal(s);
        return cl2B.multiply(sB).doubleValue();
    }

    /**
     * 计算过程排放量
     * @param d 白云石原料消耗量
     * @return
     */
    public static Double getEProcess(String d){
        BigDecimal cl2B = new BigDecimal(0.46844);
        BigDecimal dB = new BigDecimal(d);
        return cl2B.multiply(dB).doubleValue();
    }

    /**
     * 计算购入的电力消费的排放量
     * @param ad 年度内的外购电力
     * @param ef 区域电网年平均供电因子
     * @return
     */
    public static Double getEPurchasedElectricity(String ad, String ef){
        BigDecimal adB = new BigDecimal(ad);
        BigDecimal efB = new BigDecimal(ef);
        return adB.multiply(efB).doubleValue();
    }

    /**
     * 计算购入的热力消费的排放量  或者 输出的热力排放量
     * @param adH 年度内的外购热力
     * @return
     */
    public static Double getEPurchaseHeatOreOutputHeat(String adH){
        BigDecimal cl2B = new BigDecimal(0.11);
        BigDecimal adHB = new BigDecimal(adH);
        return cl2B.multiply(adHB).doubleValue();
    }

    /**
     * 计算输出的电力排放量
     * @param adP 年度内的输出电量
     * @param ef 区域电网年平均供电因子
     * @return
     */
    public static Double getEOutputElectricity(String adP, String ef){
        BigDecimal adPB = new BigDecimal(adP);
        BigDecimal efB = new BigDecimal(ef);
        return adPB.multiply(efB).doubleValue();
    }

}
